home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 2009 February
/
PCWFEB09.iso
/
Software
/
Resources
/
Chat & Communication
/
Digsby build 37
/
digsby_setup.exe
/
lib
/
email
/
quoprimime.pyo
(
.txt
)
< prev
next >
Wrap
Python Compiled Bytecode
|
2008-10-13
|
5KB
|
208 lines
# Source Generated with Decompyle++
# File: in.pyo (Python 2.5)
__all__ = [
'body_decode',
'body_encode',
'body_quopri_check',
'body_quopri_len',
'decode',
'decodestring',
'encode',
'encodestring',
'header_decode',
'header_encode',
'header_quopri_check',
'header_quopri_len',
'quote',
'unquote']
import re
from string import hexdigits
from email.utils import fix_eols
CRLF = '\r\n'
NL = '\n'
MISC_LEN = 7
hqre = re.compile('[^-a-zA-Z0-9!*+/ ]')
bqre = re.compile('[^ !-<>-~\\t]')
def header_quopri_check(c):
return bool(hqre.match(c))
def body_quopri_check(c):
return bool(bqre.match(c))
def header_quopri_len(s):
count = 0
for c in s:
if hqre.match(c):
count += 3
continue
count += 1
return count
def body_quopri_len(str):
count = 0
for c in str:
if bqre.match(c):
count += 3
continue
count += 1
return count
def _max_append(L, s, maxlen, extra = ''):
if not L:
L.append(s.lstrip())
elif len(L[-1]) + len(s) <= maxlen:
L[-1] += extra + s
else:
L.append(s.lstrip())
def unquote(s):
return chr(int(s[1:3], 16))
def quote(c):
return '=%02X' % ord(c)
def header_encode(header, charset = 'iso-8859-1', keep_eols = False, maxlinelen = 76, eol = NL):
if not header:
return header
if not keep_eols:
header = fix_eols(header)
quoted = []
if maxlinelen is None:
max_encoded = 100000
else:
max_encoded = maxlinelen - len(charset) - MISC_LEN - 1
for c in header:
if c == ' ':
_max_append(quoted, '_', max_encoded)
continue
if not hqre.match(c):
_max_append(quoted, c, max_encoded)
continue
_max_append(quoted, '=%02X' % ord(c), max_encoded)
joiner = eol + ' '
return []([ '=?%s?q?%s?=' % (charset, line) for line in quoted ])
def encode(body, binary = False, maxlinelen = 76, eol = NL):
if not body:
return body
if not binary:
body = fix_eols(body)
encoded_body = ''
lineno = -1
lines = body.splitlines(1)
for line in lines:
if line.endswith(CRLF):
line = line[:-2]
elif line[-1] in CRLF:
line = line[:-1]
lineno += 1
encoded_line = ''
prev = None
linelen = len(line)
for j in range(linelen):
c = line[j]
prev = c
if bqre.match(c):
c = quote(c)
elif j + 1 == linelen:
if c not in ' \t':
encoded_line += c
prev = c
continue
if len(encoded_line) + len(c) >= maxlinelen:
encoded_body += encoded_line + '=' + eol
encoded_line = ''
encoded_line += c
if prev and prev in ' \t':
if lineno + 1 == len(lines):
prev = quote(prev)
if len(encoded_line) + len(prev) > maxlinelen:
encoded_body += encoded_line + '=' + eol + prev
else:
encoded_body += encoded_line + prev
else:
encoded_body += encoded_line + prev + '=' + eol
encoded_line = ''
if lines[lineno].endswith(CRLF) or lines[lineno][-1] in CRLF:
encoded_body += encoded_line + eol
else:
encoded_body += encoded_line
encoded_line = ''
return encoded_body
body_encode = encode
encodestring = encode
def decode(encoded, eol = NL):
if not encoded:
return encoded
decoded = ''
for line in encoded.splitlines():
line = line.rstrip()
if not line:
decoded += eol
continue
i = 0
n = len(line)
while i < n:
c = line[i]
if c != '=':
decoded += c
i += 1
elif i + 1 == n:
i += 1
continue
elif i + 2 < n and line[i + 1] in hexdigits and line[i + 2] in hexdigits:
decoded += unquote(line[i:i + 3])
i += 3
else:
decoded += c
i += 1
if i == n:
decoded += eol
continue
if not encoded.endswith(eol) and decoded.endswith(eol):
decoded = decoded[:-1]
return decoded
body_decode = decode
decodestring = decode
def _unquote_match(match):
s = match.group(0)
return unquote(s)
def header_decode(s):
s = s.replace('_', ' ')
return re.sub('=\\w{2}', _unquote_match, s)